package com.ibbt.musicplayer.server.services;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.ibbt.musicplayer.client.service_interfaces.NowOnAirParserService;
import com.ibbt.musicplayer.client.utils.NoaObject;

@SuppressWarnings("serial")
public class NowOnAirServiceImpl extends RemoteServiceServlet implements
		NowOnAirParserService {

	@Override
	/**
	 * Haalt het NoaObject op van gegevens op een bepaalde url
	 * & van een bepaald type.
	 */
	public NoaObject parse(String url, int type)
			throws IllegalArgumentException {

		switch (type) {
			// CASE 1 -> Urgent FM
			case 1: return parseUrgentFm(url);
			default: return new NoaObject(false,"","");
		}
	}

	/**
	 * Haalt het NoaObject op van de zender Urgent FM.
	 * 
	 * Urgent gebruikt een plain old tekstbestand (.txt) om de NOA
	 * te publiceren. Dit heeft als gevolg dat wanneer de titel van
	 * een nummer een '-' bevat, deze methode een foutief resultaat
	 * zal teruggeven.
	 * 
	 * @param url	de url waar de NOA info van Urgent fm te vinden is
	 * 
	 * @return 		het NoaObject met de artiest en het nummer
	 */
	private NoaObject parseUrgentFm(String url) {
		String text, artist, song;
		Boolean status = false;

		text = readFromUrl(url);

		// Artiest & Liedje uit de tekst halen
		if (!text.startsWith("no trackinfo")) {
			artist = text.substring(0, text.lastIndexOf('-') - 2);
			song = text.substring(text.lastIndexOf('-') + 2, text.length());
			status = true;
		} else {
			artist = "Geen info beschikbaar";
			song = "";
			status = false;
		}

		return (new NoaObject(status, artist, song));
	}

	/**
	 * Converteert de inhoud van een url naar een string
	 * 
	 * @param url	de betreffende url
	 * @return		de inhoud die de url bevatte in stringformaat
	 */
	private String readFromUrl(String url) {
		String inputLine;
		String text = "";

		try {
			URL u = new URL(url);
			URLConnection uc = u.openConnection();
			BufferedReader in = new BufferedReader(new InputStreamReader(
					uc.getInputStream()));

			while ((inputLine = in.readLine()) != null)
				text += inputLine;
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return text;
	}

}
